/**
* Validate Json
* 
* @param {*} json Json 字符
* @param {*} warn 是否提醒
* @returns 
*/
export const validateJson = (json: any, warn: boolean) => {
    try {
        json = parseJson(json);
        return true;
    } catch (e) {
        let index = 0;
        if (e instanceof Error && typeof e.message === 'string') {
            const match = e.message.match(/position (\d+)/);
            if (match && match[1]) {
                index = parseInt(match[1], 10);
            }
        }
        warn && console.error('JSON 格式错误，发生在以下语法附近：\n' + json.substring(index).replace(/\s+/g, ''));
        return false;
    }
}

/**
 * Parse Json
 * 
 * @param {*} json  Json 字符
 */
export const parseJson = (json: any): any => {
    return typeof json == 'object' ? json : parseJson(JSON.parse(json));
}

/**
 * Deep Clone
 * 
 * @param {*} obj 克隆对象
 */
export const deepClone = (obj: any) => {
    return JSON.parse(JSON.stringify(obj));
}